/*
  花园长椅
  题目描述
    约瑟夫的花园正在举办一场宴会。
    目前已经有一部分受邀请的人员到达了宴会现场，他们分别坐在花园内的 n 张长椅上。
    还未到达的总共有 m 个人，约瑟夫想知道，当所有人来齐了之后，人数最多的长椅上：
      最多能有几个人？
      最少会有几个人？
  输入
    第一行为一个整数 n (1 ≤ n ≤ 100)，为长椅的个数。
    第二行为一个整数 m (1 ≤ m ≤ 10000)，为还未到达的人员数量。
      接下来有 n 行，每行一个整数，其中第 i 个整数为第 i 个长椅一开始的人数，最多为 100。
  输出
    两个用空格隔开的数，第一个数为人数最多的长椅上最少人数，第二个为最多人数。
  样例输入
    3
    7
    1
    6
    5
  样例输出
    7 13
*/

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n;
    int m;
    int a[105] = {};    // a[i] 表示 第 i 个长椅上一开始的人数，其中 i > 0
    long long num = 0;  // 总人数

    cin >> n >> m;

    // 从 terminal 上输入每个长椅上一开始的人数(a[1] ~ a[n]), 并计算总人数
    for (int i = 1; i <= n; i++) {
        int x;
        cin >> x;
        a[i] = x;
        num = num + x;
    }
    num = num + m;

    // 对 a[1] ~ a[n] 按从小到大的顺序进行排序
    //   (排序后, a[n] 为其中的最大值)
    sort(a + 1, a + n + 1);

    /*
      思路:
        最多的情况:
          将后面到达的人数 m 全部放到一开始人数最多的椅子上, 即为 a[n] + m!
        最少的情况:
          分 2 种情况：
            1). 后面到达的人数 m 足够多, 即平均值大于等于最大值 a[n], 那么用平均值来计算最少的情况;
              a). 总人数为 n 的整数倍:
                    最少的情况下的值为 平均值！
              b). 总人数不是 n 的整数倍：
                    最少的情况下的值为 平均值 + 1!
            2). 后面到达的人数 m 不够多, 即平均值小于最大值 a[n], 那么最少的情况下的值即为 a[n]
    */
    long long xi = num / n;  // x1 表示：将总人数分配到 n 张椅子上，平均每张椅子上坐的人数！
    if (xi >= a[n]) { // 说明: 后面到达的人数 m 足够多, 即平均值大于等于最大值 a[n], 那么用平均值来计算最少的情况!
        if (num % n == 0){
            cout << xi << " " << a[n] + m;
        } else {
            cout << xi + 1 << " " << a[n] + m;
        }
    } else { // 说明: 后面到达的人数 m 不够多, 即平均值小于最大值 a[n], 那么最少的情况下的值即为 a[n]
        cout << a[n] << a[n] + m;
    }

    return 0;
}